1. 录音机提供的基本功能
开始录音---》停止录音,播放录音,让用户选择是否保存录音文件
2. Android源码中SoundRecorder.java是唯一的Activity,在这类里面使用MeidaRecorder完成录音功能,使用MediaPlayer提供的接口来完成播放录音的功能。
mRemainingTimeCalculator.setBitRate(BITRATE_AMR);
mRecorder.startRecording(MediaRecorder.OutputFormat.AMR_NB, ".amr", this);
这是源码中录制AMR的一段,这里的mRecorder是录音机自己的Recorder类的一个实例,并非MediaRecorder类的实例。
MediaRecorder和MediaPlayer被封装在Recorder类中,这个类相当于SoundRecorder与底层交互的接口类,即完成录音功能的实现,也负责回放录音功能的实现。
在Recorder中:
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(outputfileformat);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mRecorder.setOutputFile(mSampleFile.getAbsolutePath());
mRecorder.prepare();
mRecorder.start();
这个是Recorder中调用MediaRecorder来录音的基本实现,当然实际还会做异常处理的。
在SoundRecorder文件中除了主类SoundRecorder外还有一个类RemainingTimeCalculator,这类主要是用来计算录音的剩余时间的。
计算时间的依据是存储录音文件的介质剩余存储空间的大小和录音的比特率。
但是这里有一个问题:录音的比特率在应用中是写死的,并没有查询底层实际的录音比特率,比如AMR格式的比特率被hardcode为5900,即AMR Mode 2
但是现在很多手机可能实际使用的是更高级的AMR,所以这个计算出的时间是有一定偏差的。
此录音机支持两种录音格式:AMR, 3GPP,不支持M4A。
综上,这个原生的录音机只是提供了一些基本的功能,简单实用,满足基本录音的需要,如果要求高的话,建议更换更为专业的第三方录音软件。